import path from "path";
import fs from "fs";
import { fileURLToPath } from "url";

//查询任意包下的所有js文件
function queryAllCtrl(dir) {
  //拿到可被浏览器解析的传入的目录的绝对路径,
  const dirPath = new URL(`../${dir}`, import.meta.url).href;
  // console.log(dirPath);

  //转换成绝对路径用于判断目录是否存在
  const dirPath2 = fileURLToPath(dirPath);
  // console.log(dirPath2);
  if (fs.existsSync(dirPath2)) {
    //读取该路径下的所有文件(数组形式展现)
    const allFiles = fs.readdirSync(dirPath2);
    // console.log(allFiles);

    //只遍历.js文件
    let allFileJs = allFiles
      .filter((file) => file.endsWith(".js"))
      .map((file) => `${dirPath}/${file}`);
    // console.log(allFileJs);

    //返回所查询到的所有.js文件
    return allFileJs;
  }

  //目录不存在则返回null
  return null;
}

//注册路由
function regrouter(router, dirPath) {
  //遍历出所查询到的.js文件
  dirPath.forEach(async (item) => {
    let { users } = await import(item); //拿出文件里的路由对象
    //遍历对象拿属性和值并注册
    for (const user in users) {
      //解构对象的属性拿到请求方式及路径
      const [reqMethod, reqPath] = user.split(" ");
      //拿到请求所对应的方法
      const reqFn = users[user];
      if (reqMethod === "get") {
        router.get(reqPath, reqFn);
      }
      if (reqMethod === "post") {
        router.post(reqPath, reqFn);
      }
      if (reqMethod === "put") {
        router.put(reqPath, reqFn);
      }
      if (reqMethod === "delete") {
        router.delete(reqPath, reqFn);
      }
    }
  });
}

//访问静态资源
function staticVisit1() {
  let a = fileURLToPath(import.meta.url);
  // console.log(a);
  let b = path.dirname(path.dirname("a"));
  // console.log(b);
  let c = path.join(b, "static");
  // console.log(c);
  return c;
}

export const queryAllControlles = queryAllCtrl; //暴露查询任意包下的所有js文件的函数
export const regRouter = regrouter; //暴露用于路由对象
export const staticVisit = staticVisit1; //暴露用于样式渲染
